<?php
namespace app\apijson\query\operators;

class LikeOperator
{
    public static function apply($query, $key, $value)
    {
        // 模糊查询 content$
        if (preg_match('/^(\w+)\$$/', $key, $m)) {
            $field = $m[1];
            if (!preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*$/', $field)) {
                throw new \app\apijson\core\ApiJsonException('非法模糊字段: ' . $field);
            }
            $query->where($field, 'like', $value);
            return true;
        }

        // 正则/便捷模糊查询 content~
        if (preg_match('/^(\w+)~$/', $key, $m)) {
            $field = $m[1];
            if (!preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*$/', $field)) {
                throw new \app\apijson\core\ApiJsonException('非法正则字段: ' . $field);
            }
            // 判断 value 是否为正则表达式
            if (preg_match('/[\^\$\[\]\(\)\|\+\*\{\}]/', $value)) {
                // 正则表达式
                $query->whereRaw("$field REGEXP ?", [$value]);
            } else {
                // 便捷模糊查询
                $query->where($field, 'like', '%' . $value . '%');
            }
            return true;
        }
        
        return false;
    }
} 